class Validator {
  constructor(cfgs) {
    this.cfgs = cfgs;
  }

  check(data, bol) {
    var cfgs = this.cfgs;
    for (var k in cfgs) {
      var cfg = cfgs[k];
      var d = data[k];
      if (d) {
        if (cfg.notZero) {
          if (parseInt(d) == 0) {
            if (this.tip) this.tip(cfg.zeroMsg, bol);
            return false;
          }
        }
        if (cfg.regex && !cfg.regex.exec(d)) {
          if (this.tip) this.tip(cfg.errorMsg, bol);
          return false;
        }
        if (cfg.maxByte) {
          if (this.countByte(d) > cfg.maxByte) {
            if (this.tip) this.tip(cfg.byteMsg, bol);
            return false;
          }
        }
        if (cfg.maxChar) {
          if (this.countChar(d) > cfg.maxChar) {
            if (this.tip) this.tip(cfg.charMsg, bol);
            return false;
          }
        }
        if (cfg.minChar) {
          if (this.countChar(d) < cfg.minChar) {
            if (this.tip) this.tip(cfg.minMsg, bol);
            return false;
          }
        }
        if (cfg.minNum || cfg.minNum === 0) {
          if (d < cfg.minNum) {
            if (this.tip) this.tip(cfg.minNumMsg, bol);
            return false;
          }
        }
        if (cfg.maxNum || cfg.maxNum === 0) {
          if (d > cfg.maxNum) {
            if (this.tip) this.tip(cfg.maxNumMsg, bol);
            return false;
          }
        }
      } else {
        if (cfg.notNull) {
          if (this.tip && cfg.nullMsg) this.tip(cfg.nullMsg, bol);
          return false;
        }
      }
    }
    return true;
  }

  countByte(str) {
    var totalCount = 0;
    for (var i = 0; i < str.length; i++) {
      var c = str.charCodeAt(i);
      if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
        totalCount++;
      } else {
        totalCount += 2;
      }
    }
    return totalCount;
  }

  countChar(str) {
    return str.length;
  }

  /**
   *错误提示
   *msg:错误提示信息
   *fieldName:错误字段名
   *
   *可按需重写该方法
   */
  tip(msg, bol) {
    if (bol === false) return;
    uni.showToast({
      title: msg,
      icon: "none",
      duration: 2000,
    });
  }
}
export default Validator;
